﻿//----------------------------------------------------------------------------------------
// Copyright (C) 2008  银龙小子 版权所有。
//
// 文件编号：      
// 文 件 名：      DataBaseBuildProvider.cs
// 文件功能描述：   DataBaseBuildProvider
//
// 创建标识：      毛才君    2008-3-22 13:01:03
//
// 修改标识：
// 修改描述：
// 
// 修改标识：
// 修改描述：
//----------------------------------------------------------------------------------------
using System.IO;
using System.Web.Compilation;
using System.Security.Permissions;

namespace MaoCaiJun.DataBase
{
    /// <summary>
    /// 生成源代码的入口类
    /// </summary>
    [PermissionSet(SecurityAction.Demand, Unrestricted = true)]
   class DataBaseBuildProvider : BuildProvider
    {
        /// <summary>
        /// 生成用于生成提供程序的虚拟路径的源代码，并将该源代码添加到指定的程序集生成器中。
        /// </summary>
        /// <param name="assemblyBuilder">引用由生成提供程序生成的源代码的程序集生成器。</param>
        public override void GenerateCode(AssemblyBuilder assemblyBuilder)
        {
            using (Stream passedFile = OpenStream())
            {
                if (passedFile.Length > 1024000) { return; }//当文件小于1024kb时,退出
                string path = System.Web.Hosting.HostingEnvironment.MapPath(VirtualPath);
                string fileName = Path.ChangeExtension(path,".cs");
                //string dataDoc=  Path.Combine( Path.GetDirectoryName(path),"DataDoc.html");
                string basePath = Path.GetDirectoryName(path);
                string fullPath = Path.Combine(basePath, fileName);
                //System.Windows.Forms.MessageBox.Show(assemblyBuilder.GetTempFilePhysicalPath("bb"));

                assemblyBuilder.AddCodeCompileUnit(this, BuildProviders.DataBaseBuild.Build(passedFile, fullPath));
               // MaoCaiJun.DataBase.BuildProviders.DataBaseBuild.CompileInMemory(MaoCaiJun.DataBase.BuildProviders.DataBaseBuild.Build(passedFile, fullPath));
                //assemblyBuilder.AddAssemblyReference(MaoCaiJun.DataBase.BuildProviders.DataBaseBuild.CompileInMemory(MaoCaiJun.DataBase.BuildProviders.DataBaseBuild.Build(passedFile, fullPath)));
            }
        }
    }
}